package com.syedu.day05;

import cn.hutool.core.util.ArrayUtil;

/**
 * description：Java第三方增强组件包
 *
 * https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html
 * apache commons   它是最流行的Java拓展包,它包括了很多的组件,使用对应功能时需要引入不同的jar包
 * commons-lang         基础语言增强包
 * commons-collections  集合相关
 * commons-logging      日志相关
 * commons-dbcp         数据源连接池
 * ...
 *
 * Hutool   近几年流行开来,国人制作,文档中文,入门简单,友好度较高
 * https://apidoc.gitee.com/dromara/hutool/
 *
 * google guava     google公司的Java增强组件
 *
 * @author Administrator
 * @date 2022/3/11 17:16
 */
public class Hutool {
    public static void main(String[] args) {
        Integer[] arr1 = {1, 2, 3};
        Integer[] arr2 = {5, 4, 3};
        Integer[] arr3 = {7, 9, 8};

        /**
         * 数组合并
         * public static int[] addAll(int[]... arrays) {
         * int[]... arrays  可变长参数,即参数个数是随意的
         * 注意: 可变长参数的本质其实就是数组!
         *
         * int... args == {1,2,3};
         * int[]... arrays  == {{arr1, arr2, arr3}}
         */
        Integer[] addAll = ArrayUtil.addAll(arr1, arr2, arr3);
        System.out.println(ArrayUtil.toString(addAll));

        /**
         * 数组元素添加
         * 注意:
         * 此方法返回Java顶级类型Object,所以需要强转成对应的类型
         * 强制转换需要注意类型安全问题,否则会出现类型转换异常:java.lang.ClassCastException
         *
         * 数组元素必须是对象类型,输出时使用ArrayUtil的toString()方法
         */
        Integer[] integers = {1, 2, 3};
        Object append = ArrayUtil.append(integers, 10, 11, 12);
        //来自于hutool内置的输出方法
        System.out.println(ArrayUtil.toString(append));

        //判断集合中是否包含指定元素
        boolean contains = ArrayUtil.contains(arr1, 2);
        System.out.println(contains);

        //数组元素排重
        Integer[] distinct = ArrayUtil.distinct(addAll);
        System.out.println(ArrayUtil.toString(distinct));

        //以指定符号连接数组元素
        String[] strArr = {"AA", "BB", "CC"};
        String join = ArrayUtil.join(strArr, "-");
        System.out.println(join);

        //获取数组中指定元素首次出现的下标
        //注意: 如果数组中不存在该元素,则下标返回-1
        int indexOf = ArrayUtil.indexOf(addAll, 3);
        System.out.println(indexOf);
        //获取数组中指定元素最后一次出现的下标
        int lastIndexOf = ArrayUtil.lastIndexOf(addAll, 3);
        System.out.println(lastIndexOf);

        //获取数组元素最大值和最小值
        Integer max = ArrayUtil.max(addAll);
        Integer min = ArrayUtil.min(addAll);
        System.out.println(max);
        System.out.println(min);

        //创建数组(元素类型,和数组长度)
        String[] strings = ArrayUtil.newArray(String.class, 10);
        System.out.println(ArrayUtil.toString(strings));

        //数组元素删除
        //根据下标删除
        int[] remove = ArrayUtil.remove(new int[]{1, 1, 2, 2, 3, 3}, 5);
        System.out.println(ArrayUtil.toString(remove));

        //根据元素删除(只删除第一次出现的)
        int[] removeEle = ArrayUtil.removeEle(new int[]{8, 4, 8, 1, 2, 3}, 8);
        System.out.println(ArrayUtil.toString(removeEle));
    }
}